#pragma once
#include "AdderFunction.h"
class AdderValue;
class AdderBytecodeEngine;

class BuiltinFunction: public AdderFunction
{
public:
	int argument_count;
	BuiltinFunction0 func0;
	BuiltinFunction1 func1;
	BuiltinFunction2 func2;
	BuiltinFunction3 func3;
	BuiltinFunction4 func4;
	BuiltinFunction5 func5;

	BuiltinFunction();
	BuiltinFunction(BuiltinFunction0 func);
	BuiltinFunction(BuiltinFunction1 func);
	BuiltinFunction(BuiltinFunction2 func);
	BuiltinFunction(BuiltinFunction3 func);
	BuiltinFunction(BuiltinFunction4 func);
	BuiltinFunction(BuiltinFunction5 func);
	AdderValue * execute(AdderBytecodeEngine* engine);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2, AdderValue* arg3);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2, AdderValue* arg3, AdderValue* arg4);
	AdderValue * execute(AdderBytecodeEngine* engine, AdderValue* arg1, AdderValue* arg2, AdderValue* arg3, AdderValue* arg4, AdderValue* arg5);
};
